home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / share / pygtk / 2.0 / codegen / definitions.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2006-01-20  |  19KB  |  705 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. import sys
  5. from copy import *
  6.  
  7. def get_valid_scheme_definitions(defs):
  8.     return _[1]
  9.  
  10.  
  11. class Parameter(object):
  12.     
  13.     def __init__(self, ptype, pname, pdflt, pnull, prop = None):
  14.         self.ptype = ptype
  15.         self.pname = pname
  16.         self.pdflt = pdflt
  17.         self.pnull = pnull
  18.  
  19.     
  20.     def __len__(self):
  21.         return 4
  22.  
  23.     
  24.     def __getitem__(self, i):
  25.         return (self.ptype, self.pname, self.pdflt, self.pnull)[i]
  26.  
  27.     
  28.     def merge(self, old):
  29.         if old.pdflt is not None:
  30.             self.pdflt = old.pdflt
  31.         
  32.         if old.pnull is not None:
  33.             self.pnull = old.pnull
  34.         
  35.  
  36.  
  37.  
  38. class Property(object):
  39.     
  40.     def __init__(self, pname, optional, argname):
  41.         self.pname = pname
  42.         self.optional = optional
  43.         self.argname = argname
  44.  
  45.     
  46.     def merge(self, old):
  47.         if old.optional is not None:
  48.             self.optional = old.optional
  49.         
  50.         if old.argname is not None:
  51.             self.argname = old.argname
  52.         
  53.  
  54.  
  55.  
  56. class Definition:
  57.     
  58.     def __init__(self, *args):
  59.         '''Create a new defs object of this type.  The arguments are the
  60. \tcomponents of the definition'''
  61.         raise RuntimeError, 'this is an abstract class'
  62.  
  63.     
  64.     def merge(self, old):
  65.         '''Merge in customisations from older version of definition'''
  66.         raise RuntimeError, 'this is an abstract class'
  67.  
  68.     
  69.     def write_defs(self, fp = sys.stdout):
  70.         '''write out this definition in defs file format'''
  71.         raise RuntimeError, 'this is an abstract class'
  72.  
  73.     
  74.     def guess_return_value_ownership(self):
  75.         '''return 1 if caller owns return value'''
  76.         if getattr(self, 'is_constructor_of', False):
  77.             self.caller_owns_return = True
  78.         elif self.ret in ('char*', 'gchar*', 'string'):
  79.             self.caller_owns_return = True
  80.         else:
  81.             self.caller_owns_return = False
  82.  
  83.  
  84.  
  85. class ObjectDef(Definition):
  86.     
  87.     def __init__(self, name, *args):
  88.         self.name = name
  89.         self.module = None
  90.         self.parent = None
  91.         self.c_name = None
  92.         self.typecode = None
  93.         self.fields = []
  94.         self.implements = []
  95.         self.class_init_func = None
  96.         for arg in get_valid_scheme_definitions(args):
  97.             if arg[0] == 'in-module':
  98.                 self.module = arg[1]
  99.                 continue
  100.             if arg[0] == 'parent':
  101.                 self.parent = arg[1]
  102.                 continue
  103.             if arg[0] == 'c-name':
  104.                 self.c_name = arg[1]
  105.                 continue
  106.             if arg[0] == 'gtype-id':
  107.                 self.typecode = arg[1]
  108.                 continue
  109.             if arg[0] == 'fields':
  110.                 for parg in arg[1:]:
  111.                     self.fields.append((parg[0], parg[1]))
  112.                 
  113.             if arg[0] == 'implements':
  114.                 self.implements.append(arg[1])
  115.                 continue
  116.         
  117.  
  118.     
  119.     def merge(self, old):
  120.         self.fields = old.fields
  121.         self.implements = old.implements
  122.  
  123.     
  124.     def write_defs(self, fp = sys.stdout):
  125.         fp.write('(define-object ' + self.name + '\n')
  126.         if self.module:
  127.             fp.write('  (in-module "' + self.module + '")\n')
  128.         
  129.         if self.parent != (None, None):
  130.             fp.write('  (parent "' + self.parent + '")\n')
  131.         
  132.         for interface in self.implements:
  133.             fp.write('  (implements "' + interface + '")\n')
  134.         
  135.         if self.c_name:
  136.             fp.write('  (c-name "' + self.c_name + '")\n')
  137.         
  138.         if self.typecode:
  139.             fp.write('  (gtype-id "' + self.typecode + '")\n')
  140.         
  141.         if self.fields:
  142.             fp.write('  (fields\n')
  143.             for ftype, fname in self.fields:
  144.                 fp.write('    \'("' + ftype + '" "' + fname + '")\n')
  145.             
  146.             fp.write('  )\n')
  147.         
  148.         fp.write(')\n\n')
  149.  
  150.  
  151.  
  152. class InterfaceDef(Definition):
  153.     
  154.     def __init__(self, name, *args):
  155.         self.name = name
  156.         self.module = None
  157.         self.c_name = None
  158.         self.typecode = None
  159.         self.vtable = None
  160.         self.fields = []
  161.         self.interface_info = None
  162.         for arg in get_valid_scheme_definitions(args):
  163.             if arg[0] == 'in-module':
  164.                 self.module = arg[1]
  165.                 continue
  166.             if arg[0] == 'c-name':
  167.                 self.c_name = arg[1]
  168.                 continue
  169.             if arg[0] == 'gtype-id':
  170.                 self.typecode = arg[1]
  171.                 continue
  172.             if arg[0] == 'vtable':
  173.                 self.vtable = arg[1]
  174.                 continue
  175.         
  176.         if self.vtable is None:
  177.             self.vtable = self.c_name + 'Iface'
  178.         
  179.  
  180.     
  181.     def write_defs(self, fp = sys.stdout):
  182.         fp.write('(define-interface ' + self.name + '\n')
  183.         if self.module:
  184.             fp.write('  (in-module "' + self.module + '")\n')
  185.         
  186.         if self.c_name:
  187.             fp.write('  (c-name "' + self.c_name + '")\n')
  188.         
  189.         if self.typecode:
  190.             fp.write('  (gtype-id "' + self.typecode + '")\n')
  191.         
  192.         fp.write(')\n\n')
  193.  
  194.  
  195.  
  196. class EnumDef(Definition):
  197.     
  198.     def __init__(self, name, *args):
  199.         self.deftype = 'enum'
  200.         self.name = name
  201.         self.in_module = None
  202.         self.c_name = None
  203.         self.typecode = None
  204.         self.values = []
  205.         for arg in get_valid_scheme_definitions(args):
  206.             if arg[0] == 'in-module':
  207.                 self.in_module = arg[1]
  208.                 continue
  209.             if arg[0] == 'c-name':
  210.                 self.c_name = arg[1]
  211.                 continue
  212.             if arg[0] == 'gtype-id':
  213.                 self.typecode = arg[1]
  214.                 continue
  215.             if arg[0] == 'values':
  216.                 for varg in arg[1:]:
  217.                     self.values.append((varg[0], varg[1]))
  218.                 
  219.         
  220.  
  221.     
  222.     def merge(self, old):
  223.         pass
  224.  
  225.     
  226.     def write_defs(self, fp = sys.stdout):
  227.         fp.write('(define-' + self.deftype + ' ' + self.name + '\n')
  228.         if self.in_module:
  229.             fp.write('  (in-module "' + self.in_module + '")\n')
  230.         
  231.         fp.write('  (c-name "' + self.c_name + '")\n')
  232.         fp.write('  (gtype-id "' + self.typecode + '")\n')
  233.         if self.values:
  234.             fp.write('  (values\n')
  235.             for name, val in self.values:
  236.                 fp.write('    \'("' + name + '" "' + val + '")\n')
  237.             
  238.             fp.write('  )\n')
  239.         
  240.         fp.write(')\n\n')
  241.  
  242.  
  243.  
  244. class FlagsDef(EnumDef):
  245.     
  246.     def __init__(self, *args):
  247.         apply(EnumDef.__init__, (self,) + args)
  248.         self.deftype = 'flags'
  249.  
  250.  
  251.  
  252. class BoxedDef(Definition):
  253.     
  254.     def __init__(self, name, *args):
  255.         self.name = name
  256.         self.module = None
  257.         self.c_name = None
  258.         self.typecode = None
  259.         self.copy = None
  260.         self.release = None
  261.         self.fields = []
  262.         for arg in get_valid_scheme_definitions(args):
  263.             if arg[0] == 'in-module':
  264.                 self.module = arg[1]
  265.                 continue
  266.             if arg[0] == 'c-name':
  267.                 self.c_name = arg[1]
  268.                 continue
  269.             if arg[0] == 'gtype-id':
  270.                 self.typecode = arg[1]
  271.                 continue
  272.             if arg[0] == 'copy-func':
  273.                 self.copy = arg[1]
  274.                 continue
  275.             if arg[0] == 'release-func':
  276.                 self.release = arg[1]
  277.                 continue
  278.             if arg[0] == 'fields':
  279.                 for parg in arg[1:]:
  280.                     self.fields.append((parg[0], parg[1]))
  281.                 
  282.         
  283.  
  284.     
  285.     def merge(self, old):
  286.         self.fields = old.fields
  287.  
  288.     
  289.     def write_defs(self, fp = sys.stdout):
  290.         fp.write('(define-boxed ' + self.name + '\n')
  291.         if self.module:
  292.             fp.write('  (in-module "' + self.module + '")\n')
  293.         
  294.         if self.c_name:
  295.             fp.write('  (c-name "' + self.c_name + '")\n')
  296.         
  297.         if self.typecode:
  298.             fp.write('  (gtype-id "' + self.typecode + '")\n')
  299.         
  300.         if self.copy:
  301.             fp.write('  (copy-func "' + self.copy + '")\n')
  302.         
  303.         if self.release:
  304.             fp.write('  (release-func "' + self.release + '")\n')
  305.         
  306.         if self.fields:
  307.             fp.write('  (fields\n')
  308.             for ftype, fname in self.fields:
  309.                 fp.write('    \'("' + ftype + '" "' + fname + '")\n')
  310.             
  311.             fp.write('  )\n')
  312.         
  313.         fp.write(')\n\n')
  314.  
  315.  
  316.  
  317. class PointerDef(Definition):
  318.     
  319.     def __init__(self, name, *args):
  320.         self.name = name
  321.         self.module = None
  322.         self.c_name = None
  323.         self.typecode = None
  324.         self.fields = []
  325.         for arg in get_valid_scheme_definitions(args):
  326.             if arg[0] == 'in-module':
  327.                 self.module = arg[1]
  328.                 continue
  329.             if arg[0] == 'c-name':
  330.                 self.c_name = arg[1]
  331.                 continue
  332.             if arg[0] == 'gtype-id':
  333.                 self.typecode = arg[1]
  334.                 continue
  335.             if arg[0] == 'fields':
  336.                 for parg in arg[1:]:
  337.                     self.fields.append((parg[0], parg[1]))
  338.                 
  339.         
  340.  
  341.     
  342.     def merge(self, old):
  343.         self.fields = old.fields
  344.  
  345.     
  346.     def write_defs(self, fp = sys.stdout):
  347.         fp.write('(define-pointer ' + self.name + '\n')
  348.         if self.module:
  349.             fp.write('  (in-module "' + self.module + '")\n')
  350.         
  351.         if self.c_name:
  352.             fp.write('  (c-name "' + self.c_name + '")\n')
  353.         
  354.         if self.typecode:
  355.             fp.write('  (gtype-id "' + self.typecode + '")\n')
  356.         
  357.         if self.fields:
  358.             fp.write('  (fields\n')
  359.             for ftype, fname in self.fields:
  360.                 fp.write('    \'("' + ftype + '" "' + fname + '")\n')
  361.             
  362.             fp.write('  )\n')
  363.         
  364.         fp.write(')\n\n')
  365.  
  366.  
  367.  
  368. class MethodDefBase(Definition):
  369.     
  370.     def __init__(self, name, *args):
  371.         dump = 0
  372.         self.name = name
  373.         self.ret = None
  374.         self.caller_owns_return = None
  375.         self.c_name = None
  376.         self.typecode = None
  377.         self.of_object = None
  378.         self.params = []
  379.         self.varargs = 0
  380.         self.deprecated = None
  381.         for arg in get_valid_scheme_definitions(args):
  382.             if arg[0] == 'of-object':
  383.                 self.of_object = arg[1]
  384.                 continue
  385.             if arg[0] == 'c-name':
  386.                 self.c_name = arg[1]
  387.                 continue
  388.             if arg[0] == 'gtype-id':
  389.                 self.typecode = arg[1]
  390.                 continue
  391.             if arg[0] == 'return-type':
  392.                 self.ret = arg[1]
  393.                 continue
  394.             if arg[0] == 'caller-owns-return':
  395.                 self.caller_owns_return = arg[1] in ('t', '#t')
  396.                 continue
  397.             if arg[0] == 'parameters':
  398.                 for parg in arg[1:]:
  399.                     ptype = parg[0]
  400.                     pname = parg[1]
  401.                     pdflt = None
  402.                     pnull = 0
  403.                     for farg in parg[2:]:
  404.                         if farg[0] == 'default':
  405.                             pdflt = farg[1]
  406.                             continue
  407.                         if farg[0] == 'null-ok':
  408.                             pnull = 1
  409.                             continue
  410.                     
  411.                     self.params.append(Parameter(ptype, pname, pdflt, pnull))
  412.                 
  413.             if arg[0] == 'varargs':
  414.                 self.varargs = arg[1] in ('t', '#t')
  415.                 continue
  416.             if arg[0] == 'deprecated':
  417.                 self.deprecated = arg[1]
  418.                 continue
  419.             sys.stderr.write('Warning: %s argument unsupported.\n' % arg[0])
  420.             dump = 1
  421.         
  422.         if dump:
  423.             self.write_defs(sys.stderr)
  424.         
  425.         if self.caller_owns_return is None and self.ret is not None:
  426.             self.guess_return_value_ownership()
  427.         
  428.  
  429.     
  430.     def merge(self, old, parmerge):
  431.         self.caller_owns_return = old.caller_owns_return
  432.         self.varargs = old.varargs
  433.         if not parmerge:
  434.             self.params = deepcopy(old.params)
  435.             return None
  436.         
  437.         for i in range(len(self.params)):
  438.             (ptype, pname, pdflt, pnull) = self.params[i]
  439.             for p2 in old.params:
  440.                 if p2[1] == pname:
  441.                     self.params[i] = (ptype, pname, p2[2], p2[3])
  442.                     break
  443.                     continue
  444.             
  445.         
  446.  
  447.     
  448.     def _write_defs(self, fp = sys.stdout):
  449.         if self.of_object != (None, None):
  450.             fp.write('  (of-object "' + self.of_object + '")\n')
  451.         
  452.         if self.c_name:
  453.             fp.write('  (c-name "' + self.c_name + '")\n')
  454.         
  455.         if self.typecode:
  456.             fp.write('  (gtype-id "' + self.typecode + '")\n')
  457.         
  458.         if self.caller_owns_return:
  459.             fp.write('  (caller-owns-return #t)\n')
  460.         
  461.         if self.ret:
  462.             fp.write('  (return-type "' + self.ret + '")\n')
  463.         
  464.         if self.deprecated:
  465.             fp.write('  (deprecated "' + self.deprecated + '")\n')
  466.         
  467.         if self.params:
  468.             fp.write('  (parameters\n')
  469.             for ptype, pname, pdflt, pnull in self.params:
  470.                 fp.write('    \'("' + ptype + '" "' + pname + '"')
  471.                 if pdflt:
  472.                     fp.write(' (default "' + pdflt + '")')
  473.                 
  474.                 if pnull:
  475.                     fp.write(' (null-ok)')
  476.                 
  477.                 fp.write(')\n')
  478.             
  479.             fp.write('  )\n')
  480.         
  481.         if self.varargs:
  482.             fp.write('  (varargs #t)\n')
  483.         
  484.         fp.write(')\n\n')
  485.  
  486.  
  487.  
  488. class MethodDef(MethodDefBase):
  489.     
  490.     def __init__(self, name, *args):
  491.         MethodDefBase.__init__(self, name, *args)
  492.         for item in ('c_name', 'of_object'):
  493.             if self.__dict__[item] == None:
  494.                 self.write_defs(sys.stderr)
  495.                 raise RuntimeError, 'definition missing required %s' % (item,)
  496.                 continue
  497.         
  498.  
  499.     
  500.     def write_defs(self, fp = sys.stdout):
  501.         fp.write('(define-method ' + self.name + '\n')
  502.         self._write_defs(fp)
  503.  
  504.  
  505.  
  506. class VirtualDef(MethodDefBase):
  507.     
  508.     def write_defs(self, fp = sys.stdout):
  509.         fp.write('(define-virtual ' + self.name + '\n')
  510.         self._write_defs(fp)
  511.  
  512.  
  513.  
  514. class FunctionDef(Definition):
  515.     
  516.     def __init__(self, name, *args):
  517.         dump = 0
  518.         self.name = name
  519.         self.in_module = None
  520.         self.is_constructor_of = None
  521.         self.ret = None
  522.         self.caller_owns_return = None
  523.         self.c_name = None
  524.         self.typecode = None
  525.         self.params = []
  526.         self.varargs = 0
  527.         self.deprecated = None
  528.         for arg in get_valid_scheme_definitions(args):
  529.             if arg[0] == 'in-module':
  530.                 self.in_module = arg[1]
  531.                 continue
  532.             if arg[0] == 'is-constructor-of':
  533.                 self.is_constructor_of = arg[1]
  534.                 continue
  535.             if arg[0] == 'c-name':
  536.                 self.c_name = arg[1]
  537.                 continue
  538.             if arg[0] == 'gtype-id':
  539.                 self.typecode = arg[1]
  540.                 continue
  541.             if arg[0] == 'return-type':
  542.                 self.ret = arg[1]
  543.                 continue
  544.             if arg[0] == 'caller-owns-return':
  545.                 self.caller_owns_return = arg[1] in ('t', '#t')
  546.                 continue
  547.             if arg[0] == 'parameters':
  548.                 for parg in arg[1:]:
  549.                     ptype = parg[0]
  550.                     pname = parg[1]
  551.                     pdflt = None
  552.                     pnull = 0
  553.                     for farg in parg[2:]:
  554.                         if farg[0] == 'default':
  555.                             pdflt = farg[1]
  556.                             continue
  557.                         if farg[0] == 'null-ok':
  558.                             pnull = 1
  559.                             continue
  560.                     
  561.                     self.params.append(Parameter(ptype, pname, pdflt, pnull))
  562.                 
  563.             if arg[0] == 'properties':
  564.                 if self.is_constructor_of is None:
  565.                     print >>sys.stderr, 'Warning: (properties ...) is only valid for constructors'
  566.                 
  567.                 for prop in arg[1:]:
  568.                     pname = prop[0]
  569.                     optional = False
  570.                     argname = pname
  571.                     for farg in prop[1:]:
  572.                         if farg[0] == 'optional':
  573.                             optional = True
  574.                             continue
  575.                         if farg[0] == 'argname':
  576.                             argname = farg[1]
  577.                             continue
  578.                     
  579.                     self.params.append(Property(pname, optional, argname))
  580.                 
  581.             if arg[0] == 'varargs':
  582.                 self.varargs = arg[1] in ('t', '#t')
  583.                 continue
  584.             if arg[0] == 'deprecated':
  585.                 self.deprecated = arg[1]
  586.                 continue
  587.             sys.stderr.write('Warning: %s argument unsupported\n' % (arg[0],))
  588.             dump = 1
  589.         
  590.         if dump:
  591.             self.write_defs(sys.stderr)
  592.         
  593.         if self.caller_owns_return is None and self.ret is not None:
  594.             self.guess_return_value_ownership()
  595.         
  596.         for item in ('c_name',):
  597.             if self.__dict__[item] == None:
  598.                 self.write_defs(sys.stderr)
  599.                 raise RuntimeError, 'definition missing required %s' % (item,)
  600.                 continue
  601.         
  602.  
  603.     _method_write_defs = MethodDef.__dict__['write_defs']
  604.     
  605.     def merge(self, old, parmerge):
  606.         self.caller_owns_return = old.caller_owns_return
  607.         self.varargs = old.varargs
  608.         if not parmerge:
  609.             self.params = deepcopy(old.params)
  610.             return None
  611.         
  612.         
  613.         def merge_param(param):
  614.             for old_param in old.params:
  615.                 if old_param.pname == param.pname:
  616.                     if isinstance(old_param, Property):
  617.                         return deepcopy(old_param)
  618.                     else:
  619.                         param.merge(old_param)
  620.                         return param
  621.                 isinstance(old_param, Property)
  622.             
  623.             raise param.pname, [] % ([], [ p.pname for p in old.params ])
  624.  
  625.         
  626.         try:
  627.             self.params = map(merge_param, self.params)
  628.         except RuntimeError:
  629.             self.params = deepcopy(old.params)
  630.  
  631.         if not self.is_constructor_of:
  632.             
  633.             try:
  634.                 self.is_constructor_of = old.is_constructor_of
  635.             except AttributeError:
  636.                 pass
  637.             except:
  638.                 None<EXCEPTION MATCH>AttributeError
  639.             
  640.  
  641.         None<EXCEPTION MATCH>AttributeError
  642.         if isinstance(old, MethodDef):
  643.             self.name = old.name
  644.             self.write_defs = self._method_write_defs
  645.             self.of_object = old.of_object
  646.             del self.params[0]
  647.         
  648.  
  649.     
  650.     def write_defs(self, fp = sys.stdout):
  651.         fp.write('(define-function ' + self.name + '\n')
  652.         if self.in_module:
  653.             fp.write('  (in-module "' + self.in_module + '")\n')
  654.         
  655.         if self.is_constructor_of:
  656.             fp.write('  (is-constructor-of "' + self.is_constructor_of + '")\n')
  657.         
  658.         if self.c_name:
  659.             fp.write('  (c-name "' + self.c_name + '")\n')
  660.         
  661.         if self.typecode:
  662.             fp.write('  (gtype-id "' + self.typecode + '")\n')
  663.         
  664.         if self.caller_owns_return:
  665.             fp.write('  (caller-owns-return #t)\n')
  666.         
  667.         if self.ret:
  668.             fp.write('  (return-type "' + self.ret + '")\n')
  669.         
  670.         if self.deprecated:
  671.             fp.write('  (deprecated "' + self.deprecated + '")\n')
  672.         
  673.         if self.params:
  674.             if isinstance(self.params[0], Parameter):
  675.                 fp.write('  (parameters\n')
  676.                 for ptype, pname, pdflt, pnull in self.params:
  677.                     fp.write('    \'("' + ptype + '" "' + pname + '"')
  678.                     if pdflt:
  679.                         fp.write(' (default "' + pdflt + '")')
  680.                     
  681.                     if pnull:
  682.                         fp.write(' (null-ok)')
  683.                     
  684.                     fp.write(')\n')
  685.                 
  686.                 fp.write('  )\n')
  687.             elif isinstance(self.params[0], Property):
  688.                 fp.write('  (properties\n')
  689.                 for prop in self.params:
  690.                     fp.write('    \'("' + prop.pname + '"')
  691.                     if prop.optional:
  692.                         fp.write(' (optional)')
  693.                     
  694.                     fp.write(')\n')
  695.                 
  696.                 fp.write('  )\n')
  697.             
  698.         
  699.         if self.varargs:
  700.             fp.write('  (varargs #t)\n')
  701.         
  702.         fp.write(')\n\n')
  703.  
  704.  
  705.